package com.td.filemanager.utils;

import com.td.filemanager.ResourceTable;
import com.td.library.utils.LogUtil;
import ohos.agp.components.Component;
import ohos.agp.components.LayoutScatter;
import ohos.agp.components.Text;
import ohos.agp.utils.LayoutAlignment;
import ohos.agp.window.dialog.ToastDialog;
import ohos.app.Context;
import ohos.global.resource.NotExistException;
import ohos.global.resource.ResourceManager;
import ohos.global.resource.WrongTypeException;

import java.io.IOException;

import static ohos.agp.components.ComponentContainer.LayoutConfig.MATCH_CONTENT;
import static ohos.agp.components.ComponentContainer.LayoutConfig.MATCH_PARENT;

/**
 * 提示帮助类
 */
public class WidgetHelper {
    private static final String TAG = WidgetHelper.class.getSimpleName();
    // 定义常量1秒
    private static final int ONE_SECOND = 1000;

    // 无参构造方法
    private WidgetHelper(){
    }

    /**
     * 提示框
     * @param context 上下文对象
     * @param msgId 消息id
     */
    public static void showTips(Context context, int msgId) {
        // 根据资源Id, 获取文本字符串
        String msg = getStringByResourceId(context, msgId);
        // 显示1秒提示框
        showOneSecondTips(context, msg);
    }

    /**
     * 显示提示消息
     *
     * @param context 上下文对象
     * @param msg 消息内容
     * @param durationTime 显示时长
     */
    public static void showTips(Context context, String msg, int durationTime) {
        // 获取到提示帮助布局组件
        Component rootView = LayoutScatter.getInstance(context).parse(ResourceTable.Layout_widget_helper, null, false);
        // 在上面提示帮助布局组件, 获取文本组件
        Text text = (Text)rootView.findComponentById(ResourceTable.Id_helperText);
        // 设置文本组件显示内容
        text.setText(msg);

        // 初始化一个提示框对象
        ToastDialog toastDialog = new ToastDialog(context);
        // 设置提示框宽度为百分之百, 高度为内容长度
        toastDialog.setSize(MATCH_PARENT, MATCH_CONTENT);
        // 延时durationTime秒后, 自动关闭
        toastDialog.setDuration(durationTime);
        toastDialog.setAutoClosable(true);
        // 背景为透明
        toastDialog.setTransparent(true);
        // 居中显示
        toastDialog.setAlignment(LayoutAlignment.CENTER);
        // 显示内容为上面的提示帮助布局组件
        toastDialog.setComponent(rootView);
        // 显示对话框
        toastDialog.show();
    }

    /**
     * 显示1秒提示框
     * @param context 上下文对象
     * @param msg 消息
     */
    public static void showOneSecondTips(Context context, String msg) {
        showTips(context, msg, ONE_SECOND);
    }

    /**
     * 根据资源Id, 获取文本字符串
     * @param context 上下文对象
     * @param msgId 消息id
     * @return 文本值
     */
    public static String getStringByResourceId(Context context, int msgId) {
        if (context == null) {
            LogUtil.info(TAG, "Context is empty,get String failed");
            return "";
        }

        // 获取资源管理对象
        ResourceManager resMgr = context.getResourceManager();
        if (resMgr == null) {
            LogUtil.info(TAG, "ResourceManager is empty,get String failed");
        }

        // 根据资源Id获取字符串
        String value = "";
        try {
            value = resMgr.getElement(msgId).getString();
        } catch (NotExistException | WrongTypeException | IOException e) {
            LogUtil.error(TAG, "get string failed from resource manager");
        }

        return value;
    }
}
